// 使用须知
// 获取数据方法命名为 getDataList
// 数据集合命名为 dataList
//提交表单命名为  subForm   参数 page 默认值要设置为1
//getDataList获取数据成功 必须return { length,data}  length数据长度  data得到的数据
//首次加载数据需要传入 参数 frist  判断是否赋值给 getDataList获取数据成功
//接口参数 req_param
export default {
    data() {
        return {
            /* down: "-- 上拉加载更多 --",
             loading: "正在加载...",
             normal: "-- 没有更多了 --",*/
            status: "down", // 加载前值为down，加载中为loading，没有数据为nomore
            loading: true, //加载状态
            dataList: [], //数据
            dataTotal: "--", //数据总条数
            // 页面获取表格数据的接口
            urls: {},
            // 页面绑定表格的对象用 searchForm
            subForm: {
                page: 1, //查询页码
                limit: 10, //查询条数
            },
        };
    },
    computed: {
        dataLength() {
            return this.dataList.length
        }
    },
    // 页面触底触发
    async onReachBottom() {
        console.log("页面触底 :>> 分页触发", this.subForm, this.status);
        if (this.status == "nomore" || this.status == "loading") return;
        this.subForm.offset++;
        this.status = "loading";
        const {length, data} = await this.getDataList(this.subForm);
        await this.pageCallBack(data); //获取数据后触发回调
        this.dataList = this.dataList.concat(data.rows);

        if (length < this.subForm.limit) {
            this.status = "nomore";
            return;
        }
        this.status = "down";
    },
    methods: {
        //初始化数据
        initData() {
            this.subForm.offset = 1
            this.loading = true
            this.getDataList()
        },
        // 获取页面数据回调
        async pageCallBack(data) {
        },
        //判断是否是json格式
        isJSON(str) {
            try {
                let obj = JSON.parse(str);
                return !!obj && typeof obj === "object";
            } catch (e) {
            }
            return false;
        },
        // scroll-view触底
        async scrolltolower() {
            console.log("scroll-view触底 :>> 分页触发", this.subForm, this.status);
            if (this.status == "nomore" || this.status == "loading") return;
            this.subForm.offset++;
            this.status = "loading";
            const {length, data} = await this.getDataList(this.subForm);
            await this.pageCallBack(data); //获取数据后触发回调
            this.dataList = this.dataList.concat(data.rows)

            if (length < this.subForm.limit) {
                this.status = "nomore";
                return;
            }

            this.status = "down";

        },
        /**
         * @description: 记录列表
         *  @param {String} api_list_name 接口所属集合名字
         *  @param {String} api_name 接口名字
         * @param {fun} fun 处理data数据回调
         * @return {Obj}
         */
        async getDataList(fun) {
            const appCode = uni.getStorageSync("appCode");
            //若参数是数组则转json
            /* Object.keys(this.subForm).forEach((key) => {
                 this.subForm[key] = this.subForm[key] instanceof Array ? JSON.stringify(this.subForm[key]) : this.subForm[key];
             });*/

            //调取api
            let api = this.$api[appCode];
            Object.keys(this.urls).forEach((key) => {
                api = api[this.urls[key]];
            });

            const {code, data,} = await api(this.subForm);

            if (code == 200) {
                if (this.subForm.offset == 1) {
                    this.dataTotal = data.count;
                    this.status = (data.rows.length < this.subForm.limit) ? "nomore" : "down";
                    await this.pageCallBack(data); //获取数据后触发回调
                    this.dataList = data.rows || [];
                    fun && fun(data);
                }
                this.loading = false;
                //若参数是json则转数组
                Object.keys(this.subForm).forEach((key) => {
                    this.subForm[key] = this.isJSON(this.subForm[key]) ? JSON.parse(this.subForm[key]) : this.subForm[key];
                });

                return {
                    length: data.rows.length,
                    data,
                };
            }
        },
    },
};
